home *** CD-ROM | disk | FTP | other *** search
- """
- Tests for uu module.
- Nick Mathewson
- """
-
- from test_support import verify, TestFailed, verbose, TESTFN
- import sys, os
- import uu
- from StringIO import StringIO
-
- teststr = "The smooth-scaled python crept over the sleeping dog\n"
- expected = """\
- M5&AE('-M;V]T:\"US8V%L960@<'ET:&]N(&-R97!T(&]V97(@=&AE('-L965P
- (:6YG(&1O9PH """
- encoded1 = "begin 666 t1\n"+expected+"\n \nend\n"
- if verbose:
- print '1. encode file->file'
- inp = StringIO(teststr)
- out = StringIO()
- uu.encode(inp, out, "t1")
- verify(out.getvalue() == encoded1)
- inp = StringIO(teststr)
- out = StringIO()
- uu.encode(inp, out, "t1", 0644)
- verify(out.getvalue() == "begin 644 t1\n"+expected+"\n \nend\n")
-
- if verbose:
- print '2. decode file->file'
- inp = StringIO(encoded1)
- out = StringIO()
- uu.decode(inp, out)
- verify(out.getvalue() == teststr)
- inp = StringIO("""UUencoded files may contain many lines,
- even some that have 'begin' in them.\n"""+encoded1)
- out = StringIO()
- uu.decode(inp, out)
- verify(out.getvalue() == teststr)
-
- stdinsave = sys.stdin
- stdoutsave = sys.stdout
- try:
- if verbose:
- print '3. encode stdin->stdout'
- sys.stdin = StringIO(teststr)
- sys.stdout = StringIO()
- uu.encode("-", "-", "t1", 0666)
- verify(sys.stdout.getvalue() == encoded1)
- if verbose:
- print >>stdoutsave, '4. decode stdin->stdout'
- sys.stdin = StringIO(encoded1)
- sys.stdout = StringIO()
- uu.decode("-", "-")
- verify(sys.stdout.getvalue() == teststr)
- finally:
- sys.stdin = stdinsave
- sys.stdout = stdoutsave
-
- if verbose:
- print '5. encode file->file'
- tmpIn = TESTFN + "i"
- tmpOut = TESTFN + "o"
- try:
- fin = open(tmpIn, 'wb')
- fin.write(teststr)
- fin.close()
-
- fin = open(tmpIn, 'rb')
- fout = open(tmpOut, 'w')
- uu.encode(fin, fout, tmpIn, mode=0644)
- fin.close()
- fout.close()
-
- fout = open(tmpOut, 'r')
- s = fout.read()
- fout.close()
- verify(s == 'begin 644 ' + tmpIn + '\n' + expected + '\n \nend\n')
-
- os.unlink(tmpIn)
- if verbose:
- print '6. decode file-> file'
- uu.decode(tmpOut)
- fin = open(tmpIn, 'rb')
- s = fin.read()
- fin.close()
- verify(s == teststr)
- # XXX is there an xp way to verify the mode?
-
- finally:
- try:
- fin.close()
- except:
- pass
- try:
- fout.close()
- except:
- pass
- try:
- os.unlink(tmpIn)
- except:
- pass
- try:
- os.unlink(tmpOut)
- except:
- pass
-
- if verbose:
- print '7. error: truncated input'
- inp = StringIO("begin 644 t1\n"+expected)
- out = StringIO()
- try:
- uu.decode(inp, out)
- raise TestFailed("No exception thrown")
- except uu.Error, e:
- verify(str(e) == 'Truncated input file')
-
- if verbose:
- print '8. error: missing begin'
- inp = StringIO("")
- out = StringIO()
- try:
- uu.decode(inp, out)
- raise TestFailed("No exception thrown")
- except uu.Error, e:
- verify(str(e) == 'No valid begin line found in input file')
-
- # Test to verify that decode() will refuse to overwrite an existing file
- import tempfile
- outfile = tempfile.mktemp()
- inp = StringIO('Here is a message to be uuencoded')
- out = StringIO()
- uu.encode(inp, out, outfile)
- out.seek(0)
- try:
- if verbose:
- print '9. decode w/file not exists is okay'
- uu.decode(out)
- if not os.path.exists(outfile):
- raise TestFailed('uudecode w/ out_file=None failed')
- fp = open(outfile)
- data = fp.read()
- fp.close()
- if data <> inp.getvalue():
- raise TestFailed('uudecode stored something weird')
- # Try to write it again, which should cause a failure
- if verbose:
- print '10. uudecode w/file exists fails'
- out.seek(0)
- try:
- uu.decode(out)
- except uu.Error:
- pass
- else:
- raise TestFailed('expected to get a "file exists" error')
- finally:
- try:
- os.unlink(outfile)
- except OSError:
- pass
-